from math import comb
'''
3.炸弹概率分析
斗地主游戏中，炸弹可以是四张一样数字或字母的牌，如：四张K、四张5，也可以是一对大小王。请计算斗地主游戏中，炸弹出现的概率。
'''
# 定义牌的总量和炸弹的类型数量  
total_cards = 54
normal_bombs = 13  # 2到A的每种牌都可以组成炸弹  
special_bombs = 1  # 大小王组成的特殊炸弹  

# 计算从54张牌中随机抽取54张牌的总组合数  
total_combinations = comb(total_cards, total_cards)

# 计算每种普通炸弹的出现概率（假设每种数字或字母的牌都有4张）  
normal_bomb_probability = 0
for i in range(2, 14):  # 从2到A  
    # 计算该数字或字母的牌组成炸弹的组合数  
    bomb_combinations = comb(4, 4) * comb(total_cards - 4, total_cards - 4)
    normal_bomb_probability += bomb_combinations / total_combinations

# 大小王组成的特殊炸弹是确定的，所以概率为1  
special_bomb_probability = 1

# 计算总概率（注意：这里我们假设只要有一张炸弹就算出现，所以概率会大于1）  
# 如果要计算至少出现一张炸弹的概率，需要使用1减去没有炸弹的概率  
total_bomb_probability = normal_bomb_probability + special_bomb_probability

# 打印结果  
print(f"普通炸弹出现的概率总和为: {normal_bomb_probability:.10f}")
print(f"特殊炸弹（大小王）出现的概率为: {special_bomb_probability}")
print(f"至少出现一张炸弹的总概率为: {total_bomb_probability:.10f}")

# 注意：这里的概率计算是基于整副牌全部发出的情况，实际斗地主游戏中通常只发出部分牌给玩家  
# 因此，实际游戏中的炸弹概率会低于这里的计算结果